<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>Linux 文件类型与扩展名 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>Linux 文件类型与扩展名</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ，这些文件虽然要用不同的程序来打开，但放在Linux文件类型中衡量的话，大多是常规文件（也被称为普通文件）。</p>
<h2 id="一、文件类型"><a href="#一、文件类型" class="headerlink" title="一、文件类型"></a>一、文件类型</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux文件类型常见的有：普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等，现在我们进行一个简要的说明。</p>
<h3 id="1-普通文件"><a href="#1-普通文件" class="headerlink" title="1.普通文件"></a>1.普通文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;我们用 ls -lh 来查看某个文件的属性，可以看到有类似-rwxrwxrwx，值得注意的是第一个符号是 - ，这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建，比如图像工具、文档工具、归档工具… …. 或 cp工具等。这类文件的删除方式是用rm 命令。 另外，依照文件的内容，又大略可以分为：</p>
<h4 id="纯文本档（ASCII）"><a href="#纯文本档（ASCII）" class="headerlink" title="纯文本档（ASCII）"></a>纯文本档（ASCII）</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这是Linux系统中最多的一种文件类型，称为纯文本档是因为内容为我们人类可以直接读到的数据，例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说，你可以用命令： cat ~/.bashrc 来看到该文件的内容。 (cat 是将一个文件内容读出来的指令).</p>
<h4 id="二进制文件（binary）"><a href="#二进制文件（binary）" class="headerlink" title="二进制文件（binary）"></a>二进制文件（binary）</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux系统其实仅认识且可以执行二进制文件(binary file)。Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的文件。 刚刚使用的命令cat就是一个binary file。</p>
<h4 id="数据格式化文件（data）"><a href="#数据格式化文件（data）" class="headerlink" title="数据格式化文件（data）"></a>数据格式化文件（data）</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有些程序在运作的过程当中会读取某些特定格式的文件，那些特定格式的文件可以被称为数据文件 (data file)。举例来说，我们的Linux在使用者登录时，都会将登录的数据记录在 /var/log/wtmp那个文件内，该文件是一个data file，他能够透过last这个指令读出来！ 但是使用cat时，会读出乱码～因为他是属于一种特殊格式的文件？</p>
<h3 id="2-目录文件"><a href="#2-目录文件" class="headerlink" title="2.目录文件"></a>2.目录文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当我们在某个目录下执行，看到有类似 drwxr-xr-x ，这样的文件就是目录，目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。创建目录的命令可以用 mkdir 命令，或cp命令，cp可以把一个目录复制为另一个目录。删除用rm 或rmdir命令。 </p>
<h3 id="3-字符设备或块设备文件"><a href="#3-字符设备或块设备文件" class="headerlink" title="3.字符设备或块设备文件"></a>3.字符设备或块设备文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如时您进入/dev目录，列一下文件，会看到类似如下的:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># ls -al /dev/tty</span></div><div class="line">crw-rw-rw- 1 root tty 5, 0 11-03 15:11 /dev/tty</div><div class="line">[root@localhost ~]<span class="comment"># ls -la /dev/sda1</span></div><div class="line">brw-r----- 1 root disk 8, 1 11-03 07:11 /dev/sda1</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;我们看到/dev/tty的属性是 crw-rw-rw- ，注意前面第一个字符是 c ，这表示字符设备文件。比如猫等串口设备。我们看到 /dev/sda1 的属性是 brw-r—– ，注意前面的第一个字符是b，这表示块设备，比如硬盘，光驱等设备。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这个种类的文件，是用mknode来创建，用rm来删除。目前在最新的Linux发行版本中，我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;与系统周边及储存等相关的一些文件， 通常都集中在/dev这个目录之下！通常又分为两种：</p>
<h4 id="区块（block）设备档"><a href="#区块（block）设备档" class="headerlink" title="区块（block）设备档"></a>区块（block）设备档</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;就是一些储存数据， 以提供系统随机存取的接口设备，举例来说，硬盘与软盘等就是啦！ 你可以随机的在硬盘的不同区块读写，这种装置就是成组设备！你可以自行查一下/dev/sda看看， 会发现第一个属性为[ b ]！</p>
<h4 id="字符（character）设备文件"><a href="#字符（character）设备文件" class="headerlink" title="字符（character）设备文件"></a>字符（character）设备文件</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;亦即是一些串行端口的接口设备， 例如键盘、鼠标等等！这些设备的特色就是一次性读取的，不能够截断输出。 举例来说，你不可能让鼠标跳到另一个画面，而是滑动到另一个地方！第一个属性为 [ c ]。</p>
<h3 id="4-数据接口文件（sockets）"><a href="#4-数据接口文件（sockets）" class="headerlink" title="4.数据接口文件（sockets）"></a>4.数据接口文件（sockets）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数据接口文件（或者：套接口文件），这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求， 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ]， 最常在/var/run这个目录中看到这种文件类型了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;例如：当我们启动MySQL服务器时，会产生一个mysql.sock的文件。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># ls -lh /var/lib/mysql/mysql.sock </span></div><div class="line">srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注意这个文件的属性的第一个字符是 s。</p>
<h3 id="5-符号连接文件"><a href="#5-符号连接文件" class="headerlink" title="5.符号连接文件"></a>5.符号连接文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当我们查看文件属性时，会看到有类似 lrwxrwxrwx,注意第一个字符是l，这类文件是链接文件。是通过ln -s 源文件名 新文件名 。上面是一个例子，表示setup.log是install.log的软链接文件。怎么理解呢？这和Windows操作系统中的快捷方式有点相似。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;符号链接文件的创建方法举例:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ls -lh log2012.log</span></div><div class="line">-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log</div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ln -s log2012.log  linklog.log</span></div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ls -lh *.log</span></div><div class="line">lrwxrwxrwx 1 root root   11 11-22 06:58 linklog.log -&gt; log2012.log</div><div class="line">-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log</div></pre></td></tr></table></figure>
<h3 id="6-数据传输文件（FIFO，pipe）"><a href="#6-数据传输文件（FIFO，pipe）" class="headerlink" title="6.数据传输文件（FIFO，pipe）"></a>6.数据传输文件（FIFO，pipe）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;FIFO也是一种特殊的文件类型，他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。</p>
<h2 id="二、Linux-文件扩展名"><a href="#二、Linux-文件扩展名" class="headerlink" title="二、Linux 文件扩展名"></a>二、Linux 文件扩展名</h2><h3 id="1-扩展名类型"><a href="#1-扩展名类型" class="headerlink" title="1.扩展名类型"></a>1.扩展名类型</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;基本上，Linux的文件是没有所谓的扩展名的，一个Linux文件能不能被执行，与他的第一栏的十个属性有关， 与档名根本一点关系也没有。这个观念跟Windows的情况不相同喔！在Windows底下， 能被执行的文件扩展名通常是 .com .exe .bat等等，而在Linux底下，只要你的权限当中具有x的话，例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;不过，可以被执行跟可以执行成功是不一样的～举例来说，在root家目录下的install.log 是一个纯文本档，如果经由修改权限成为 -rwxrwxrwx 后，这个文件能够真的执行成功吗？ 当然不行～因为他的内容根本就没有可以执行的数据。所以说，这个x代表这个文件具有可执行的能力， 但是能不能执行成功，当然就得要看该文件的内容.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;虽然如此，不过我们仍然希望可以藉由扩展名来了解该文件是什么东西，所以，通常我们还是会以适当的扩展名来表示该文件是什么种类的。底下有数种常用的扩展名：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;*.sh ： 脚本或批处理文件 (scripts)，因为批处理文件为使用shell写成的，所以扩展名就编成 .sh </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<em>Z, </em>.tar, <em>.tar.gz, </em>.zip, *.tgz： 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的，由于不同的压缩软件，而取其相关的扩展名！</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<em>.html, </em>.php：网页相关文件，分别代表 HTML 语法与 PHP 语法的网页文件。 .html 的文件可使用网页浏览器来直接开启，至于 .php 的文件， 则可以透过 client 端的浏览器来 server 端浏览，以得到运算后的网页结果。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;基本上，Linux系统上的文件名真的只是让你了解该文件可能的用途而已，真正的执行与否仍然需要权限的规范才行。例如虽然有一个文件为可执行文件，如常见的/bin/ls这个显示文件属性的指令，不过，如果这个文件的权限被修改成无法执行时，那么ls就变成不能执行。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;上述的这种问题最常发生在文件传送的过程中。例如你在网络上下载一个可执行文件，但是偏偏在你的 Linux系统中就是无法执行！呵呵！那么就是可能文件的属性被改变了。不要怀疑，从网络上传送到你的 Linux系统中，文件的属性与权限确实是会被改变的。</p>
<h3 id="2-Linux-文件名长度限制"><a href="#2-Linux-文件名长度限制" class="headerlink" title="2.Linux 文件名长度限制"></a>2.Linux 文件名长度限制</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在Linux底下，使用预设的Ext2/Ext3文件系统时，针对文件名长度限制为：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;单一文件或目录的最大容许文件名为 255 个字符</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;包含完整路径名称及目录 (/) 之完整档名为 4096 个字符</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;是相当长的档名！我们希望Linux的文件名可以一看就知道该文件在干嘛的， 所以档名通常是很长很长。</p>
<h3 id="3-Linux-文件名的字符的限制"><a href="#3-Linux-文件名的字符的限制" class="headerlink" title="3.Linux 文件名的字符的限制"></a>3.Linux 文件名的字符的限制</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;由于Linux在文字接口下的一些指令操作关系，一般来说，你在设定Linux底下的文件名时， 最好可以避免一些特殊字符比较好！例如底下这些：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;* ? &gt; &lt; ; &amp; ! [ ] | \ ‘ “ ` ( ) { }</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;因为这些符号在文字接口下，是有特殊意义的。另外，文件名的开头为小数点“.”时， 代表这个文件为隐藏文件！同时，由于指令下达当中，常常会使用到 -option 之类的选项， 所以你最好也避免将文件档名的开头以 - 或 + 来命名。</p>

	

	
		<span class="different-posts"><a href="/2017/10/12/2. Linux 命令/24. Linux 文件类型与扩展名/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
